Despu�s de que un NamespaceChangeListener o un ObjectChangeListener hayan sido registrados con una fuente, obtendr�n notificaciones de eventos en la forma de NamingEvents.
Un ejemplar de esta clase contiene informaci�n sobre el evento, como su tipo y la fuente del evento, e informaci�n sobre el objeto que caus� el disparo del evento. Normalmente, una fuente de evento crea un ejemplar de NamingEvent y se lo pasa a los oyentes de nombrado. Estos oyentes pueden usar los m�todos de acceso del ejemplar de NamingEvent para obtener informaci�n sobre el evento.
�Tipo de Evento
Un NamingEvent contiene un tipo que identifica el tipo del evento. Un tipo de evento podr�a ser, por ejemplo object-added o object-changed. Los tipos de eventos est�n divididos entre aquellos que afectan al espacio de nombres (como el tipo object-added) y aquello que no le afectan (como un tipo object-changed). Aqu� tenemos los tipos de eventos definidos por la clase NamingEvent.
- NamingEvent.OBJECT_CHANGED.
Un contenido de un objeto ha cambiado. Por ejemplo, uno de sus atributos se ha eliminado o quiz�s su uni�n ha sido reemplazada.
- NamingEvent.OBJECT_ADDED.
Se ha a�adido un nuevo objeto al espacio de nombres.
- NamingEvent.OBJECT_REMOVED.
Se ha eliminado un objeto existente del espacio de nombres
- NamingEvent.OBJECT_RENAMED.
Se le ha dado otro nombre a un objeto existente. Observa que no todos los servicios de nombrado soportan la generaci�n de eventos rename. Por ejemplo, un objeto que est� siendo renombrado podr�a manifestarse como un objeto que est� siendo eliminado y otro que est� siendo a�adido.
El tipo de evento se obtiene usando getType().
�Fuente de Evento
Una fuente de evento es la entidad que dispar� el evento en el objeto con el que el oyente est� registrado. Es un ejemplar de EventContext o EventDirContext.
Puedes ir a la secci�n Registro de Oyentes para m�s infomaci�n sobre estos dos interfaces.
La fuente de evento se obtiene usando getEventContext() o java.util.EventObject.getSource().
Estos m�todos s�lo se diferencian en que getEventContext() devuelve el resultado como un EventContext mientras que getSource() devuelve el resultado en un java.lang.Object.
Podemos usar la fuente de evento para obtener m�s informaci�n sobre el objeto u objetos que lo lanzaron. Si usamos este m�todo, debemos sincronizar su acceso. Esto es porque las implementaciones de Context no est�n garantizadas para ser seguras antes los threads (y EventContext es un subinterface de Context).
Aqu� hay un c�digo de oyente que usa la fuente de eventos.
Attributes attrs;
// Get the event source
EventContext ctx = evt.getEventContext();
// Get the name of the object that changed
// Should really check for null binding first.
String which = evt.getNewBinding().getName();
// Lock the event source
synchronized(ctx) {
attrs = ctx.getAttributes(which, new String[]{"objectclass"});
}
// Do something useful with attrs
�Otra Informaci�n
Un NamingEvent contiene, adem�s del tipo de evento y la fuente, las uniones nueva y vieja del objeto que caus� el evento, as� como otra informaci�n adicional. Usamos getNewBinding() para obtener un ejemplar de Binding que describe el estado del objeto despu�s del evento ocurrido. El Binding contiene el nombre del objeto, el propio objeto, y sus atributos. Cualquiera de estos datos podr�a no existir si el proveedor de servicios no puede suministrarlos.
Usamos getOldBinding() para obtener informaci�n similar sobre el objeto antes de que ocurriera el evento.
Observa que el nombre de las �niones nueva y vieja est� en relaci�n a la fuente del evento. Por ejemplo, supongamos que nuestro programa usa el siguiente c�digo para registrar un oyente.
EventContext ctx = (EventContext)
(new InitialContext(env).lookup("ou=People"));
// Create the listener
NamingListener listener = new SampleNCListener("nc1");
// Register the listener for namespace change events
ctx.addNamingListener("ou=Objects,cn=John Smith",
EventContext.ONELEVEL_SCOPE, listener);
Cuando se a�ade el objeto "cn=String" bajo "ou=Objects", el nombre en la uni�n del NamingEvent tiene el nombre "cn=String, ou=Objects, cn=John Smith".
Adem�s, podemos usar getChangeInfo() para obtener cualquier informaci�n de cambio que el servidor o el proveedor de servicio haya suministrado. Por ejemplo, el servidor podr�a enviar un identifiador que identifica el cambio.